package com.zhike.service.friends;

import java.util.List;

import com.zhike.common.dto.FriendDeleteDTO;
import com.zhike.common.dto.FriendOfflineDTO;
import com.zhike.common.dto.FriendRemarkDTO;
import com.zhike.common.dto.FriendRequestDTO;
import com.zhike.common.dto.FriendUIdDTO;
import com.zhike.common.dto.R;
import com.zhike.common.dto.UserRosterVO;
import com.zhike.common.dto.UserUIdDTO;
import com.zhike.common.model.Roster;
import com.zhike.common.vo.OfflineFriendsRequestVO;
import com.zhike.common.vo.RosterVO;

public interface IFriendsService {
  /**
   * 根据 uid和 friendUid查询是否好友
   *
   * @param uid       uid
   * @param friendUid friendUid
   * @return 数量
   */
  Integer queryFriendsCountByUidFriendUid(String uid, String friendUid);

  /**
   * 根据 uid和 fuid查询好友请求数量
   *
   * @param uid       uid
   * @param friendUid friendUid
   * @return 数量
   */
  Integer queryFriendsRequestCountByUidFriendUid(String uid, String friendUid);

  /**
   * 更新好友请求时间
   *
   * @param desc      desc
   * @param time      时间戳
   * @param uid       uid
   * @param friendUid friendUid
   * @return 结果
   */
  Boolean updateFriendsRequestTime(String desc, Long time, String uid, String friendUid);

  /**
   * 新增一条好友请求信息
   *
   * @param dto
   * @return 结果
   */
  Boolean insertFriendsRequestData(FriendRequestDTO dto);

  /**
   * 新增一条好友信息
   *
   * @param uid       uid
   * @param friendUid 好友 id
   * @return 结果
   */
  Boolean insertFriendsData(String uid, String friendUid);

  /**
   * 删除好友请求信息
   *
   * @param uid       uid
   * @param friendUid 好友 id
   * @return 结果
   */
  Boolean deleteFriendsRequestData(String uid, String friendUid);

  /**
   * 查询用户的好友列表
   *
   * @param uid uid
   * @return 结果
   */
  List<RosterVO> getRosterByUid(String uid);

  /**
   * 查询用户的好友列表
   * 
   * @param deviceNo 设备号
   * @return
   */
  List<RosterVO> getRosterByDeviceNo(String deviceNo);

  /**
   * 查询好友列表
   * 
   * @param dto
   * @return
   */
  List<UserRosterVO> queryFriendsList(UserUIdDTO dto);

  /**
   * 发起添加好友请求的接口
   *
   * @param dto 统一对象
   * @return 结果
   */
  Boolean sendAddFriendRequest(String uid,FriendUIdDTO dto) throws Exception;

  /**
   * 被添加者【同意】加好友请求的接口*
   *
   * @param dto 统一对象
   * @return 结果
   */
  Boolean agreeFriend(FriendUIdDTO dto) throws Exception;

  /**
   * 被添加者【拒绝】加好友请求的接口*
   *
   * @param dfc 统一对象
   * @param ip  ip
   * @return 结果
   */
  Boolean refuseFriend(FriendUIdDTO dto) throws Exception;

  /**
   * 删除指定好友接口
   *
   * @param dfc 统一对象
   * @param ip  ip
   * @return 结果
   */
  R deleteFriend(FriendDeleteDTO dto);

  /**
   * 【接口1008-2-8】更新好友信息中的备注、描述等的接口
   *
   * @param dto 统一对象
   * @return 结果
   */
  Boolean updateFriendRemark(String uid, FriendRemarkDTO dto);

  /**
   * 获取离线聊天消息的接口
   *
   * @param dto
   * @return 结果
   */
  R getOfflineFriendsMessages(FriendOfflineDTO dto);

  /**
   * 获取未处理的加好友请求总数的接口
   *
   * @param dfc 统一对象
   * @return 结果
   */
  R queryFriendRequestCount(UserUIdDTO dto) throws Exception;

  /**
   * 获取未处理的加好友
   * 
   * @param fakeUid
   * @return
   */
  List<OfflineFriendsRequestVO> queryFriendRequestList(String fakeUid);

  /**
   * 标记星好友
   * 
   * @return
   */
  Boolean markStar(String fakeUid, String friendUid);

  /**
   * 取消标星
   * 
   * @param fakeUid
   * @param friendUid
   * @return
   */
  Boolean unmarkStar(String fakeUid, String friendUid);

  /**
   * 查询好友关系
   * 
   * @param fakeUid
   * @param friendUid
   * @return
   */
  Roster selectRoster(String fakeUid, String friendUid);
}
